// ------------------------------------------------------------------------------------------------------------------------
// Plemiona.pl 5.X Skrypt użytkowy
//
// Nazwa:      Kolorator podobnych raportów i wiadomości
// Wersja:     1.5 PL
// Autor:      Domanoid (Forum Plemion)
// Dostosował: Lukasz032 (Plemiona Ś7)
//
// Tagi specjakne:
// Licencja:   Creative Commons Uznanie autorstwa - Brak komercyjnego zastosowania - Na tych samych warunkach 2.0 Polska
// Informacje: http://creativecommons.org/licenses/by-nc-sa/2.0/pl
// Support:    lvwnbrz@lykamspam.pl
//
// ------------------------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name           Kolorator podobnych raportów i wiadomości
// @namespace      http://code.google.com/p/plemiona-skrypty/
// @description    Kolorator podobnych raportów i wiadomości
// @version        1.5 PL
// @license        Creative Commons 2.0 BY-NC-SA (http://creativecommons.org/licenses/by-nc-sa/2.0/pl)
// @author         Domanoid (Forum Plemion)
// @contributor    Lukasz032 (Plemiona Ś7)
// @include        http://pl*.plemiona.pl/*screen=report*
// @include        http://pl*.plemiona.pl/*screen=mail
// @include        http://pl*.plemiona.pl/*screen=mail&action=*
// ==/UserScript==
// ------------------------------------------------------------------------------------------------------------------------


//Czy kolory mają być przydzielane automatycznie czy przed dwuklik na raporcie? (true/false)
var autoMarkierung = true;

//Ile razy musi się powtórzyć dany raport aby skrypt zaczął kolorować raporty tego typu?
var mindestHaufigkeit = 1;

//Czy przeszukiwanie ma się odbywać po koordynatach? (najlepiej true)
var koordinatenSuchen = true;

//Czy wszystkie surowce z ryku mają być połączone?
var lieferungenZusammenfassen = false;

//Czy mają być rozróżniane różne typy raportów?
//Gdy false, wiadomości typu "ktoś wspiera WioskęA", "WioskaA jest wspierana przez kogoś",
//"ktoś dostarcza do WioskiA", "twoja pomoc w WiosceA została zaatakowana", "wycofujesz swoją pomoc z WioskiA" oraz
//"WioskaA odsyła pomoc" posiadają ten sam kolor.
var berichttypenUnterscheiden = false;

var farben = new Array(
	"#FFEFAE", "#FFD7AE", "#FECDD7", "#F9CDFE", "#E3CDFE", "#D3D7FE", "#D3ECFE", "#D3FEFA", "#CFFED0", 
  "#ECFEAF", "#FFE064", "#FFB66C", "#FD829A", "#F28EFD", "#C699FD", "#8B97FC", "#83C9FC", "#74FCEE", 
  "#69FC6C", "#DEFD73",	"#F4C400", "#F47A00", "#FB1C48", "#E311FB", "#9F4BEE", "#1D33FA", "#0581DC", 
  "#04C6B3", "#03A707", "#9CC903", "#AD966B", "#9E7A8B", "#AE6AA9", "#6B6398", "#6F8BAA", "#6DABAB", 
  "#6BAD72", "#6DE377",	"#B79300", "#4F03AB", "#020F7D", "#034A7E", "#026258", "#014503");

try{
	var css=document.styleSheets[2];
	for(var zeilenNummer=0;zeilenNummer<css.cssRules.length;zeilenNummer++)
	{
		if(css.cssRules[zeilenNummer].selectorText=="table.vis td"){
			css.cssRules[zeilenNummer].style.backgroundImage = 'none';
		}
	}
} catch(evt){}

for(var farbNummer=0;farbNummer<farben.length;farbNummer++){
	GM_addStyle("table.vis td.color"+farbNummer+" { background-color:"+farben[farbNummer]+"}");
	GM_addStyle("table.vis tr.row_a td.color"+farbNummer+" { background-color:"+farben[farbNummer]+"}");
	GM_addStyle("table.vis tr.row_b td.color"+farbNummer+" { background-color:"+farben[farbNummer]+"}");
}

var pattern1=new RegExp("\\(\\d{1,3}\\|\\d{1,3}\\)","g");
var pattern2=new RegExp("\\(\\d{1,2}:\\d{1,2}:\\d{1,2}\\)","g");

var vistabellen,tabellenNummer,datenOrt,datenOrtStelle,offsetVonHinten,laengeVonHinten;
var gruppenArray=new Array();
var zeilenArray = new Array();
var ersterDurchlauf=true;
var neustart=false;
var hakenSetzenFunktion=false;
var PA=false;


// Obsługa IE \ Opery, czyli przekierowanie odczytu i zapisu do cookies oraz styli do warstwy window.

 if(typeof GM_addStyle!="function"){
  function GM_setValue(name, value) {
		document.cookie = name + '=' + escape(value) + '; expires=' + (new Date(2020, 12, 1)).toGMTString() + ';';
	}
	function GM_getValue(name) {
		var value = document.cookie.match('/'+name+'=(.*?)(?:;|$)/');
		if(value)
		return unescape(value[1]);
		return false;
	}
	function GM_addStyle(style) {
		var styleel = document.createElement('style');
		try {
		  styleel.setAttribute('type', 'text/css');
		  styleel.innerHTML = style;
		} catch (evt) {};
		document.getElementsByTagName('head')[0].appendChild(styleel);
	}
 }


function starten() {
	try {
		var doc = getGameDoc();
		try{if(doc.getElementsByTagName("ul")[0].className=="menu nowrap quickbar"){PA=true;}}
		catch(evt){}
		var tabellen=doc.getElementsByTagName("table");
		vistabellen=new Array();
		for(var zeilenNummer=0;zeilenNummer<tabellen.length;zeilenNummer++){
			if(tabellen[zeilenNummer].className=="vis"){vistabellen.push(tabellen[zeilenNummer]);}
		}
    	if(doc.URL.match("screen=report")){	
			tabellenNummer=2;
			if(!PA){
        return false;
			}
	    	datenOrt="span";
	    	datenOrtStelle=1;
	    	offsetVonHinten=0;
	    	laengeVonHinten=12;
	    	hakenSetzenFunktion=true;
	    } else if(doc.URL.match("screen=mail")){
			if(PA){
				tabellenNummer=3;
				var seitenAuswahlZeile=vistabellen[2].getElementsByTagName("td")[0].innerHTML;
				if(seitenAuswahlZeile.search("&gt;[0-9]+&lt;")<0){
					tabellenNummer=2;
				}
				
			}
	    datenOrt="a";
	   	datenOrtStelle=1;
	   	offsetVonHinten=0;
	   	laengeVonHinten=-1;
	   	hakenSetzenFunktion=true;
		  }//Wybór strony

		var zeilen = vistabellen[tabellenNummer].getElementsByTagName("tr");
    	for(var zeilenNummer=0;zeilenNummer<zeilen.length;zeilenNummer++){
    		var daten = zeilen[zeilenNummer].getElementsByTagName(datenOrt);
			try{
				var auswahlText=daten[datenOrtStelle].innerHTML;
				var gruppenText="";
				if(koordinatenSuchen&&pattern1.test(auswahlText)){
					pattern1.lastIndex=0;
      				while(pattern1.exec(auswahlText)){}
      				gruppenText=RegExp.lastMatch;
				} else if(koordinatenSuchen&&pattern2.test(auswahlText)){
					    pattern2.lastIndex=0;
      				while(pattern2.exec(auswahlText)){}
      				gruppenText=RegExp.lastMatch;
				} else if(auswahlText.split(", ").length==3){
      				gruppenText=auswahlText.split(", ")[1];
				} else if(auswahlText.search(" atakuje ")>=0&auswahlText.lastIndexOf(" (")>auswahlText.search(" atakuje ")){
      				if(berichttypenUnterscheiden){gruppenText+="Atak ";}
      				gruppenText+=auswahlText.slice(auswahlText.search(" atakuje ")+8,auswahlText.lastIndexOf(" ("));
				} else if(auswahlText.match(" wspiera")){
      				if(berichttypenUnterscheiden){gruppenText+="Wsparcie ";}
      				gruppenText+=auswahlText.slice(auswahlText.search(" wspiera ")+8,auswahlText.lastIndexOf(" ("));
				} else if(auswahlText.match(" wycofuje ")){
      				if(berichttypenUnterscheiden){gruppenText+="Wsparcie ";}
      				gruppenText+=auswahlText.slice(auswahlText.search(" wsparcie od ")+8,auswahlText.lastIndexOf(" ("));
				} else if(auswahlText.match("Gratisowe konto Premium")){
      				if(berichttypenUnterscheiden){gruppenText+="Premium ";}
      				gruppenText+=auswahlText.substring(0,auswahlText.search("Gratisowe konto Premium"));
      	} else if(auswahlText.match("Transport ")){
      				if(berichttypenUnterscheiden){gruppenText+="Transport ";}
      				gruppenText+=auswahlText.slice(auswahlText.search("Transport ")+8,auswahlText.lastIndexOf(" ("));
				} else if ((auswahlText.match("zastępstwo")) && (auswahlText.match("Zastępstwo"))) {
      				gruppenText="Zastępstwo";
      	} else if(auswahlText.match(" zaprosił ")){
      				gruppenText="Zaproszenie";
      	} else if(auswahlText.match("Zaproszenie do plemienia ")){
      				gruppenText="Zaproszenie";
      	} else {
					gruppenText=auswahlText.substring(0,auswahlText.length-offsetVonHinten);
					if(laengeVonHinten>0) gruppenText=gruppenText.substring(gruppenText.length-laengeVonHinten,gruppenText.length);
					gruppenText=gruppenText.substring(gruppenText.lastIndexOf(">")+1);
				}
			    //alert(gruppenText);
				var gruppenNummer=0;
				while(gruppenArray[gruppenNummer]!=null&&gruppenArray[gruppenNummer][1]!=gruppenText){
					gruppenNummer++;
				}
				try{gruppenArray[gruppenNummer]=[gruppenNummer,gruppenText,gruppenArray[gruppenNummer][2],gruppenArray[gruppenNummer][3],gruppenArray[gruppenNummer][4]=gruppenArray[gruppenNummer][4]+1];}
				catch(evt){gruppenArray[gruppenNummer]=[gruppenNummer,gruppenText,autoMarkierung,false,1];}
														//gruppennummer,gruppentext,markierung,checkbox,haeufigkeit
				if(ersterDurchlauf|neustart){zeilenArray[zeilenNummer]=[gruppenNummer,function(){}];}
			}
			catch(evt){}
    	}

    	if(gruppenArray.length>farben.length|mindestHaufigkeit>1){
			gruppenArray.sort(function(p1,p2){return p2[4]-p1[4];});
	   	}

    	for(var zeilenNummer=0;zeilenNummer<zeilen.length;zeilenNummer++){
    		var daten = zeilen[zeilenNummer].getElementsByTagName(datenOrt);
			try{
				var platzNummer=0;
				while(gruppenArray[platzNummer]!=null&&gruppenArray[platzNummer][0]!=zeilenArray[zeilenNummer][0]){
					platzNummer++;
				}

				if(ersterDurchlauf|neustart){
					if(gruppenArray[platzNummer][4]<mindestHaufigkeit) gruppenArray[platzNummer][2]=false;
					
					zeilenArray[zeilenNummer][1]=(function(e) {return function() {gruppenArray[e][2]=!gruppenArray[e][2];starten();}})(platzNummer);
					zeilen[zeilenNummer].addEventListener('dblclick', zeilenArray[zeilenNummer][1], false);
					if(hakenSetzenFunktion){
						zeilenArray[zeilenNummer][2]=(function(e) {return function() {gruppenArray[e][2]=!gruppenArray[e][2];gruppenArray[e][3]=!gruppenArray[e][3];starten();}})(platzNummer);
						zeilen[zeilenNummer].getElementsByTagName("input")[0].addEventListener('dblclick',zeilenArray[zeilenNummer][2], false);
					}
				}

				var tabledata=zeilen[zeilenNummer].getElementsByTagName("td");
				for(var l=0;l<tabledata.length;l++){
					if(gruppenArray[platzNummer][2]){tabledata[l].className="color"+platzNummer;}
					else tabledata[l].className="";
				}
				if(hakenSetzenFunktion){zeilen[zeilenNummer].getElementsByTagName("input")[0].checked=gruppenArray[platzNummer][3];}
			}
			catch(evt){}
    	}
    	ersterDurchlauf=false;
    	neustart=false;
  } catch(evt) {
   
  }
}//startuje, wybiera grupy, przyporządkowywuje grupy i farbuje

function neustarten(){
	gruppenArray=new Array();
	var zeilen = vistabellen[tabellenNummer].getElementsByTagName("tr");
   	for(var zeilenNummer=0;zeilenNummer<zeilen.length;zeilenNummer++){
   		try{zeilen[zeilenNummer].removeEventListener('dblclick', zeilenArray[zeilenNummer][1],false);}catch(evt){}
   		try{zeilen[zeilenNummer].getElementsByTagName("input")[0].removeEventListener('dblclick',zeilenArray[zeilenNummer][2], false);}catch(evt){}
   	}
   	zeilenArray=new Array();
    neustart=true;
	starten();
}//restart przy zmianie grup

function getGameDoc(){
	getdoc=window.document;
	if(!getdoc.URL.match("game.php")){
		for(zeilenNummer=0;zeilenNummer<window.frames.length;zeilenNummer++){
			if(window.frames[zeilenNummer].document.URL.match("game.php")){
				getdoc = window.frames[zeilenNummer].document;
			}
		}
	}
	return getdoc;
}//getGameDoc

starten();
